# _*_ coding: utf-8 _*_
# .@FileName:log_tools
# .@Data....:2025-02-21 : 23 : 15
# .@Aurhor..:LiuJingYu
"""
launch:
from __future__ import unicode_literals, print_function
import maya.cmds as mc
"""
import logging
import sys
from logging.handlers import RotatingFileHandler
from pathlib import Path


def setup_logger(
        name: str = "my_app",
        log_file: str = "logs/app.log",
        max_bytes: int = 1048576,  # 1MB
        backup_count: int = 5,
        console_level: int = logging.INFO,
        file_level: int = logging.DEBUG
) -> logging.Logger:
    """
    配置并返回一个日志记录器

    参数:
        name: 日志记录器名称
        log_file: 日志文件路径
        max_bytes: 单个日志文件最大大小（字节）
        backup_count: 保留的备份文件数量
        console_level: 控制台日志级别
        file_level: 文件日志级别
    """
    # 创建日志目录
    log_path = Path(log_file).parent
    log_path.mkdir(parents=True, exist_ok=True)

    # 创建日志记录器
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)  # 设置最低级别

    # 防止重复添加handler
    if logger.handlers:
        return logger

    # 日志格式
    formatter = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s"
    )

    # 文件处理器（带轮转）
    file_handler = RotatingFileHandler(
        log_file,
        maxBytes=max_bytes,
        backupCount=backup_count,
        encoding="utf-8"
    )
    file_handler.setLevel(file_level)
    file_handler.setFormatter(formatter)

    # 控制台处理器
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setLevel(console_level)
    console_handler.setFormatter(formatter)

    # 添加处理器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

    return logger


if __name__ == "__main__":
    # 使用示例
    logger = setup_logger(name='Test_log',
                          log_file=r"F:/Python/plugin_maya_pro/packages/ipuxin_package/log/app.log")

    logger.debug("这是一条调试信息")  # 只会出现在文件日志
    logger.info("这是一条普通信息")
    logger.warning("这是一条警告信息")
    logger.error("这是一条错误信息")
    logger.critical("这是一条严重错误信息")

    try:
        1 / 0
    except Exception as e:
        logger.exception("发生异常: %s", e)